﻿using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Data.SqlClient;

public class IndicadoresData
{
	private string stringConexion;

    public IndicadoresData(string strConexion)
	{
		stringConexion = strConexion;
	}

	public DataSet GetIndicadoresPorGrupo(string id_grupo)
	{
		//Variable usada para retornar el resultado
		DataSet resultado = new DataSet();
		try
		{
			//Creo un adaptador para conectar a la base de datos y ejecutar el SP que obtiene todos los Indicador para el grupo id_grupo
			SqlDataAdapter adapter = new SqlDataAdapter("sp_GetIndicadoresPorGrupo", stringConexion);
			adapter.SelectCommand.CommandType = CommandType.StoredProcedure;

			//Agrego los parametros necesarios en el llamado del SP
			SqlParameter param = new SqlParameter("@id_grupo", SqlDbType.VarChar);
			param.Value = id_grupo;
			adapter.SelectCommand.Parameters.Add(param);

			//Lleno la variable de resultado para mostrar en la pagina
			adapter.Fill(resultado);
		}
		catch (Exception ex)
		{
			//Propago la excepcion para poder mostrarla en pantalla
			throw ex;
		}

		return resultado;
	}

	public DataSet GetTodosIndicadores()
	{
		//Variable usada para retornar el resultado
		DataSet resultado = new DataSet();
		try
		{
			//Creo un adaptador para conectar a la base de datos y ejecutar el SP que obtiene todos los Indicador
			SqlDataAdapter adapter = new SqlDataAdapter("sp_GetTodosIndicadores", stringConexion);
			adapter.SelectCommand.CommandType = CommandType.StoredProcedure;

			//Lleno la variable de resultado para mostrar en la pagina
			adapter.Fill(resultado);
		}
		catch (Exception ex)
		{
			//Propago la excepcion para poder mostrarla en pantalla
			throw ex;
		}

		return resultado;
	}

	public void AgregarIndicador(DIndicador indicador)
	{
		try
		{
			//Creo una conexion a la base de datos y la abro
			SqlConnection conexion = new SqlConnection(stringConexion);
			conexion.Open();

			//Creo un objeto SqlCommand en la conexion que acabo de crear para llamar al SP
			SqlCommand cmd = new SqlCommand("sp_AgregarIndicador", conexion);
			cmd.CommandType = CommandType.StoredProcedure;

			//Agrego los parametros necesarios en el llamado del SP
			SqlParameter param = new SqlParameter("@id_grupo", SqlDbType.VarChar); param.Value = indicador.id_grupo; cmd.Parameters.Add(param);
			param = new SqlParameter("@nombre", SqlDbType.VarChar); param.Value = indicador.nombre; cmd.Parameters.Add(param);
			param = new SqlParameter("@descripcion", SqlDbType.VarChar); param.Value = indicador.descripcion; cmd.Parameters.Add(param);
			param = new SqlParameter("@id_fuente_datos", SqlDbType.VarChar); param.Value = indicador.id_fuente_datos; cmd.Parameters.Add(param);
			param = new SqlParameter("@string_conexion", SqlDbType.VarChar); param.Value = indicador.string_conexion; cmd.Parameters.Add(param);
			param = new SqlParameter("@query", SqlDbType.VarChar); param.Value = indicador.query; cmd.Parameters.Add(param);
			param = new SqlParameter("@id_formato_valor_actual", SqlDbType.VarChar); param.Value = indicador.id_formato_valor_actual; cmd.Parameters.Add(param);
			param = new SqlParameter("@id_formato_variacion", SqlDbType.VarChar); param.Value = indicador.id_formato_variacion; cmd.Parameters.Add(param);
			param = new SqlParameter("@minimo", SqlDbType.Decimal); param.Value = indicador.minimo; cmd.Parameters.Add(param);
			param = new SqlParameter("@maximo", SqlDbType.Decimal); param.Value = indicador.maximo; cmd.Parameters.Add(param);
			param = new SqlParameter("@maximiza_minimiza", SqlDbType.VarChar); param.Value = indicador.maximiza_minimiza; cmd.Parameters.Add(param);
			param = new SqlParameter("@utilizar_cache", SqlDbType.TinyInt); param.Value = indicador.utilizar_cache; cmd.Parameters.Add(param);
			param = new SqlParameter("@intervalo_actualizacion", SqlDbType.BigInt); param.Value = indicador.intervalo_actualizacion; cmd.Parameters.Add(param);
			param = new SqlParameter("@cant_historicos", SqlDbType.Int); param.Value = indicador.cant_historicos; cmd.Parameters.Add(param);
			param = new SqlParameter("@nombre_responsable", SqlDbType.VarChar); param.Value = indicador.nombre_responsable; cmd.Parameters.Add(param);
			param = new SqlParameter("@apellido_responsable", SqlDbType.VarChar); param.Value = indicador.apellido_responsable; cmd.Parameters.Add(param);
			param = new SqlParameter("@email_responsable", SqlDbType.VarChar); param.Value = indicador.email_responsable; cmd.Parameters.Add(param);
			param = new SqlParameter("@tel_responsable", SqlDbType.VarChar); param.Value = indicador.tel_responsable; cmd.Parameters.Add(param);

			//Ejecuto el SP
			cmd.ExecuteNonQuery();

			//Cierro la conexion
			conexion.Close();
		}
		catch (Exception ex)
		{
			//Propago la excepcion para poder mostrarla en pantalla
			throw ex;
		}
	}

    public void ModificarIndicador(DIndicador indicador)
	{
		try
		{
			//Creo una conexion a la base de datos y la abro
			SqlConnection conexion = new SqlConnection(stringConexion);
			conexion.Open();

			//Creo un objeto SqlCommand en la conexion que acabo de crear para llamar al SP
			SqlCommand cmd = new SqlCommand("sp_ModificarIndicador", conexion);
			cmd.CommandType = CommandType.StoredProcedure;

			//Agrego los parametros necesarios en el llamado del SP
			SqlParameter param = new SqlParameter("@id_grupo", SqlDbType.VarChar); param.Value = indicador.id_grupo; cmd.Parameters.Add(param);
			param = new SqlParameter("@nombre", SqlDbType.VarChar); param.Value = indicador.nombre; cmd.Parameters.Add(param);
			param = new SqlParameter("@nombre_viejo", SqlDbType.VarChar); param.Value = indicador.nombre_viejo; cmd.Parameters.Add(param);
			param = new SqlParameter("@descripcion", SqlDbType.VarChar); param.Value = indicador.descripcion; cmd.Parameters.Add(param);
			param = new SqlParameter("@id_fuente_datos", SqlDbType.VarChar); param.Value = indicador.id_fuente_datos; cmd.Parameters.Add(param);
			param = new SqlParameter("@string_conexion", SqlDbType.VarChar); param.Value = indicador.string_conexion; cmd.Parameters.Add(param);
			param = new SqlParameter("@query", SqlDbType.VarChar); param.Value = indicador.query; cmd.Parameters.Add(param);
			param = new SqlParameter("@id_formato_valor_actual", SqlDbType.VarChar); param.Value = indicador.id_formato_valor_actual; cmd.Parameters.Add(param);
			param = new SqlParameter("@id_formato_variacion", SqlDbType.VarChar); param.Value = indicador.id_formato_variacion; cmd.Parameters.Add(param);
			param = new SqlParameter("@minimo", SqlDbType.Decimal); param.Value = indicador.minimo; cmd.Parameters.Add(param);
			param = new SqlParameter("@maximo", SqlDbType.Decimal); param.Value = indicador.maximo; cmd.Parameters.Add(param);
			param = new SqlParameter("@maximiza_minimiza", SqlDbType.VarChar); param.Value = indicador.maximiza_minimiza; cmd.Parameters.Add(param);
			param = new SqlParameter("@utilizar_cache", SqlDbType.TinyInt); param.Value = indicador.utilizar_cache; cmd.Parameters.Add(param);
			param = new SqlParameter("@intervalo_actualizacion", SqlDbType.BigInt); param.Value = indicador.intervalo_actualizacion; cmd.Parameters.Add(param);
			param = new SqlParameter("@cant_historicos", SqlDbType.Int); param.Value = indicador.cant_historicos; cmd.Parameters.Add(param);
			param = new SqlParameter("@nombre_responsable", SqlDbType.VarChar); param.Value = indicador.nombre_responsable; cmd.Parameters.Add(param);
			param = new SqlParameter("@apellido_responsable", SqlDbType.VarChar); param.Value = indicador.apellido_responsable; cmd.Parameters.Add(param);
			param = new SqlParameter("@email_responsable", SqlDbType.VarChar); param.Value = indicador.email_responsable; cmd.Parameters.Add(param);
			param = new SqlParameter("@tel_responsable", SqlDbType.VarChar); param.Value = indicador.tel_responsable; cmd.Parameters.Add(param);

			//Ejecuto el SP
			cmd.ExecuteNonQuery();

			//Cierro la conexion
			conexion.Close();
		}
		catch (Exception ex)
		{
			//Propago la excepcion para poder mostrarla en pantalla
			throw ex;
		}
	}

    public void EliminarIndicador(DIndicador indicador)
	{
		try
		{
			//Creo una conexion a la base de datos y la abro
			SqlConnection conexion = new SqlConnection(stringConexion);
			conexion.Open();

			//Creo un objeto SqlCommand en la conexion que acabo de crear para llamar al SP
			SqlCommand cmd = new SqlCommand("sp_EliminarIndicador", conexion);
			cmd.CommandType = CommandType.StoredProcedure;

			//Agrego los parametros necesarios en el llamado del SP
			SqlParameter param = new SqlParameter("@id_grupo", SqlDbType.VarChar); param.Value = indicador.id_grupo; cmd.Parameters.Add(param);
			param = new SqlParameter("@nombre", SqlDbType.VarChar); param.Value = indicador.nombre; cmd.Parameters.Add(param);
			
			//Ejecuto el SP
			cmd.ExecuteNonQuery();

			//Cierro la conexion
			conexion.Close();
		}
		catch (Exception ex)
		{
			//Propago la excepcion para poder mostrarla en pantalla
			throw ex;
		}
	}
}
